package com.tyk.bookstore.front.auth.strategy.factory;

import com.tyk.bookstore.front.auth.strategy.LoginAction;
import com.tyk.bookstore.front.auth.strategy.enume.LoginType;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import java.util.Map;

/**
 * @author tyk
 * @description 登录执行器工厂
 */
@SuppressWarnings("unchecked")
@Component
public class LoginActionFactory {

    /**
     * 验证码登录执行器Map
     */
    private static Map<String, LoginAction<?>> map;


    /**
     * 通过构造方法注入执行器实例
     */
    public LoginActionFactory(Map<String, LoginAction<?>> map) {
        LoginActionFactory.map = map;
    }

    /**
     * 根据登录类型构造登录执行器
     *
     * @param type 登录类型
     */
    public static <T> LoginAction<T> build(LoginType type) {
        return (LoginAction<T>) map.get(StringUtils.uncapitalize(type.getClassName()));
    }

}
